// 因为客端不可能有多个用户同时访问，我们可以不考虑它的并发，链接消耗资源等问题，使用原始的socket编程
// 客户端也不需要写啥头文件，只需要联合时候服务器的头文件即可

#include <iostream>
#include <cstdlib>
#include <string>
#include <vector>

#include <unistd.h>     // 包含 close() 函数（用于关闭套接字）
#include <sys/socket.h> // 核心套接字函数和数据结构，如 socket(), bind(), connect(), accept(), send(), recv()
#include <netinet/in.h> // 包含 IP 地址结构，如 struct sockaddr_in, IPPROTO_TCP, INADDR_ANY
#include <arpa/inet.h>  // 包含地址转换函数，如 inet_addr(), inet_pton(), inet_ntop()
#include <netdb.h>      // 用于主机名查询，如 gethostbyname(), getaddrinfo()

#include "User.hpp"
#include "Group.hpp"
#include "public.hpp"

// 用户信息
User g_user;
// 用户好友信息
std::vector<User> g_userfriendlist;

// 记录用户所在组的信息
std::vector<Group> g_usergrouplist;

// 显示当前登录成功的用户的信息
void ShowOnlineUserMessage()
{
    std::cout << "========================LOGIN  USER========================" << std::endl;
    std::cout << "《current user》" << "id: " << g_user.getId() << "name: " << g_user.getName() << std::endl;

    std::cout << "========================FRIEND LIST========================" << std::endl;

    if (!g_userfriendlist.empty())
    {
        for (auto &e : g_userfriendlist)
        {
            std::cout << "friendid: " << e.getId() << "friendname: "
                      << e.getName() << "onlinestate: " << e.getState() << std::endl;
        }
    }

    std::cout << "========================GROUP  LIST=======================" << std::endl;

    if (!g_usergrouplist.empty())
    {
        for (auto &e : g_usergrouplist)
        {
            std::cout << "groupid: " << e.getId() << "groupname: "
                      << e.getGroupname() << "groupdesc: " << e.getGroupdesc() << std::endl;
        }
    }

    return;
}

int main()
{

    return 0;
}